import requests
import json


class FeishuRobot:
    def __init__(self, webhook_url):
        """
        初始化飞书机器人
        :param webhook_url: 飞书机器人的Webhook地址
        """
        self.webhook_url = webhook_url
        self.headers = {
            "Content-Type": "application/json; charset=utf-8"
        }

    def send_text_message(self, content, at_all=False, at_users=None):
        """
        发送文本消息
        :param content: 消息内容
        :param at_all: 是否@所有人
        :param at_users: 需要@的用户ID列表
        :return: 接口响应结果
        """
        if at_users is None:
            at_users = []

        # 构建@用户的内容
        at_content = ""
        if at_users:
            at_content = " ".join([f"<at user_id=\"{user_id}\"></at>" for user_id in at_users]) + " "

        # 完整消息内容
        full_content = f"{at_content}{content}"

        # 构建消息体
        payload = {
            "msg_type": "text",
            "content": {
                "text": full_content
            }
        }

        # 如果需要@所有人
        if at_all:
            payload["content"]["text"] += " <at user_id=\"all\"></at>"

        return self._send_request(payload)

    def send_rich_text_message(self, title, content_list):
        """
        发送富文本消息
        :param title: 消息标题
        :param content_list: 内容列表，每个元素是一个字典，包含"tag"和相应属性
                            支持的tag: text, a(链接), at, img等
        :return: 接口响应结果
        """
        payload = {
            "msg_type": "post",
            "content": {
                "post": {
                    "zh_cn": {
                        "title": title,
                        "content": [content_list]
                    }
                }
            }
        }

        return self._send_request(payload)

    def _send_request(self, payload):
        """
        发送请求到飞书API
        :param payload: 消息体
        :return: 接口响应结果
        """
        try:
            response = requests.post(
                self.webhook_url,
                headers=self.headers,
                data=json.dumps(payload)
            )

            result = response.json()

            if result.get("code") == 0:
                print("消息发送成功")
            else:
                print(f"消息发送失败: {result.get('msg')}")

            return result

        except Exception as e:
            print(f"发送请求时发生错误: {str(e)}")
            return None


if __name__ == "__main__":
    # 替换为你的飞书机器人Webhook地址
    WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/e8926912-ba36-4569-a2a7-e7b2552cbf29"

    # 初始化机器人
    robot = FeishuRobot(WEBHOOK_URL)

    # 发送文本消息示例
    print("发送文本消息...")
    robot.send_text_message("这是一条来自飞书机器人的测试消息:推荐一下")

    # 发送带@的文本消息示例
    print("\n发送带@的文本消息...")
    # 替换为实际的用户ID
    # 飞书用户的ID 怎么查看
    robot.send_text_message("这是一条带@的消息", at_users=["ou_xxxxxx"])

    # 发送@所有人的消息示例
    print("\n发送@所有人的消息...")
    robot.send_text_message("请注意，这是一条重要通知", at_all=True)

    # 发送富文本消息示例（已移除不支持的code标签）
    print("\n发送富文本消息...")
    rich_content = [
        {"tag": "text", "text": "这是一条富文本消息示例\n\n"},
        {"tag": "text", "text": "• 可以包含列表项\n"},
        {"tag": "text", "text": "• 可以包含"},
        {"tag": "a", "text": "超链接", "href": "https://www.feishu.cn"},
        {"tag": "text", "text": "\n• 可以包含代码（使用文本形式展示）\n"},
        {"tag": "text", "text": "print('Hello, Feishu!')"}  # 用普通文本替代代码块
    ]
    robot.send_rich_text_message("富文本消息标题", rich_content)
